import {
	ref
} from 'vue'​
// 搜索到的蓝牙设备列表
const blueDeviceList = ref([])
// 蓝牙设备的id
const deviceId = ref('')
export default {
	// 初始化蓝牙
	initBlue: function() {
		uni.openBluetoothAdapter({
			success(res) {
				console.log('初始化蓝牙成功')
				console.log(res)
			},
			fail(err) {
				console.log('初始化蓝牙失败')
				console.error(err)
			}
		})
	},
	​
	// 【2】开始搜寻附近设备
	discovery: function() {
		uni.startBluetoothDevicesDiscovery({
			success(res) {
				console.log('开始搜索')

				// 开启监听回调
				uni.onBluetoothDeviceFound(found)
			},
			fail(err) {
				console.log('搜索失败')
				console.error(err)
			}
		})
	}​,

	// 【3】找到新设备就触发该方法
	found(res) {
		console.log(res)
		blueDeviceList.value.push(res.devices[0])
	}​,
	
	// 【4】连接设备
	connect(data) {
		console.log(data)​
		deviceId.value = data.deviceId​
		uni.createBLEConnection({
			deviceId: deviceId.value,
			success(res) {
				console.log('连接成功')
				console.log(res)
				// 停止搜索
				stopDiscovery()
			},
			fail(err) {
				console.log('连接失败')
				console.error(err)
			}
		})
	}​,
	
	// 【5】停止搜索
	stopDiscovery: function() {
		uni.stopBluetoothDevicesDiscovery({
			success(res) {
				console.log('停止成功')
				console.log(res)
			},
			fail(err) {
				console.log('停止失败')
				console.error(err)
			}
		})
	},
	// 【6】获取服务
	getServices: function () {
	    uni.getBLEDeviceServices({
	        deviceId: deviceId.value, // 设备ID，在上一步【4】里获取
	        success(res) {
	            console.log(res)
	        },
	        fail(err) {
	            console.error(err)
	        }
	    })
	},
	
	// 【7】获取特征值
	getCharacteristics: function () {
	    uni.getBLEDeviceCharacteristics({
	        deviceId: deviceId.value, // 设备ID，在【4】里获取到
	        serviceId: '0000FFE0-0000-1000-8000-00805F9B34FB', // 服务UUID，在【6】里能获取到
	        success(res) {
	            console.log(res)
	        },
	        fail(err) {
	            console.error(err)
	        }
	    })
	},
	
	// 【8】开启消息监听
	notify: function () {
	    uni.notifyBLECharacteristicValueChange({
	        deviceId: deviceId.value, // 设备ID，在【4】里获取到
	        serviceId: '0000FFE0-0000-1000-8000-00805F9B34FB', // 服务UUID，在【6】里能获取到
	        characteristicId: '0000FFE1-0000-1000-8000-00805F9B34FB', // 特征值，在【7】里能获取到
	        success(res) {
	            console.log(res)
	            
	            // 接受消息的方法
	            listenValueChange()
	        },
	        fail(err) {
	            console.error(err)
	        }
	    })
	},
	
	// 【9】监听消息变化
	listenValueChange: function () {
	    uni.onBLECharacteristicValueChange(res => {
	        // 结果
	        console.log(res)
	        
	        // 结果里有个value值，该值为 ArrayBuffer 类型，所以在控制台无法用肉眼观察到，必须将该值转换为16进制
	        let resHex = ab2hex(res.value)
	        console.log(resHex)
	​
	        // 最后将16进制转换为ascii码，就能看到对应的结果
	        let result = hexCharCodeToStr(resHex)
	        console.log(result)
	    })
	},
	
	// 【10】发送数据
	send: function () {
	    // 向蓝牙设备发送一个0x00的16进制数据
	    
	    let msg = 'hello'
	    
	    const buffer = new ArrayBuffer(msg.length)
	    const dataView = new DataView(buffer)
	    // dataView.setUint8(0, 0)
	    
	    for (var i = 0; i < msg.length; i++) {
	      dataView.setUint8(i, msg.charAt(i).charCodeAt())
	    }
	    
	    uni.writeBLECharacteristicValue({
	      deviceId: deviceId.value, // 设备ID，在【4】里获取到
	      serviceId: '0000FFE0-0000-1000-8000-00805F9B34FB', // 服务UUID，在【6】里能获取到
	      characteristicId: '0000FFE1-0000-1000-8000-00805F9B34FB', // 特征值，在【7】里能获取到
	      value: buffer,
	      success(res) {
	        console.log(res)
	      },
	      fail(err) {
	        console.error(err)
	      }
	    })
	},
	
	// 【11】读取数据
	read: function () {
	    uni.readBLECharacteristicValue({
	        deviceId: deviceId.value,
	        serviceId: serviceId.value,
	        characteristicId: characteristicId.value,
	        success(res) {
	            console.log('读取指令发送成功')
	            console.log(res)
	        },
	        fail(err) {
	            console.log('读取指令发送失败')
	            console.error(err)
	        }
	    })
	}
}